package com.todo.user.application.service;


import com.todo.common.common.entity.response.page.PageResult;
import com.todo.user.application.entity.bo.UserAccountBO;
import com.todo.user.application.entity.bo.UserAccountConditionBO;
import com.todo.user.common.enums.UserStatusEnum;

import javax.validation.constraints.NotNull;

/**
 * (UserAccount)表服务接口
 *
 * @author zhangwenxiang
 * @since 2024-03-04 00:19:49
 */
public interface UserAccountService {

    /**
     * 根据用户name查询用户账户信息
     *
     * @param userName
     * @return
     */
    UserAccountBO queryUserAccount(String userName);

    /**
     * 根据用户id查询用户账户信息
     *
     * @param userId
     * @return
     */
    UserAccountBO queryUserAccountById(Long userId);

    /**
     * 根据手机号查询用户账户信息
     *
     * @param phone
     * @return
     */
    UserAccountBO queryUserAccountByPhone(String phone);

    /**
     * 新增用户信息
     *
     * @param username
     * @param phone
     * @param password
     */
    Boolean insertUserAccount(@NotNull String username, String phone, String password);

    /**
     * 用户更新密码
     *
     * @param userName
     * @param oldPassword
     * @param newPassword
     * @return
     */
    Boolean updateUserSecret(String userName, String oldPassword, String newPassword);

    /**
     * 注销用户
     *
     * @param userName
     * @return
     */
    Boolean removeUserAccount(String userName);

    /**
     * 禁言用户
     *
     * @param userId
     * @param reason
     * @return
     */
    Boolean mutedUserAccountById(Long userId, UserStatusEnum userStatusEnum, String reason);

    /**
     * 多条件查询用户账户信息
     *
     * @return
     */
    PageResult<UserAccountBO> queryUserAccountByCondition(UserAccountConditionBO conditionBO);

}
